package com.bysj.lms.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.springframework.stereotype.Component;


/**
 * 描述：自定义时间转换器
 *
 * @author
 */
@Component
public class LocalDateConverter implements Converter<LocalDate> {
    /**
     * 添加不同的日期格式
     */
    private static List<String> formats = new ArrayList<String>();

    static {
        formats.add("yyyy");
        formats.add("yyyy-MM");
        formats.add("yyyy-MM-dd");
        formats.add("yyyy/MM");
        formats.add("yyyy/MM/dd");
    }

    @Override
    public Class supportJavaTypeKey() {
        return LocalDate.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public LocalDate convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
    
        if (cellData.getType().equals(CellDataTypeEnum.NUMBER)) {
            LocalDate localDate = LocalDate.of(1900, 1, 1);
            //excel 有些奇怪的bug, 导致日期数差2
            localDate = localDate.plusDays(cellData.getNumberValue().longValue() - 2);
            return localDate;
        } else if (cellData.getType().equals(CellDataTypeEnum.STRING)) {
            return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        } else {
            return null;
        }
    }

    @Override
    public CellData convertToExcelData(LocalDate localDate, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        
        return new CellData<>(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
    }

//    @Override
//    public LocalDate convert(String source) {
//
//            try {
//                String string = "^\\\\d{4}$";
//                if (source.matches(string)) {
//                    //2017
//                    return parseDate(source, formats.get(0));
//                } else if (source.matches("^\\d{4}-\\d{1,2}$")) {
//                    //2017-09
//                    return parseDate(source, formats.get(1));
//                } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
//                    //2017-09-10
//                    return parseDate(source, formats.get(2));
//                }  else if (source.matches("^\\d{4}/\\d{1,2}$")) {
//                    //2017/09
//                    return parseDate(source, formats.get(3));
//                } else if (source.matches("^\\d{4}/\\d{1,2}/\\d{1,2}$")) {
//                    //2017/09/10
//                    return parseDate(source, formats.get(4));
//                } else {
//                    throw new Exception("没有相应的日期类型匹配");
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        return null;
//    }
//
//     /**
//     * 功能描述：格式化日期
//     *
//     * @param dateStr
//     *            String 字符型日期
//     * @param format
//     *            String 格式
//     * @return LocalDateTime 日期
//     */
//    public  LocalDate parseDate(String dateStr, String format) {
//        LocalDate date=null;
//            try {
//                DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
//                date = LocalDate.parse(dateStr, df);
//            }  catch (Exception e1) {
//                e1.printStackTrace();
//            }
//        return date;
//    }
}
